home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
17 Bit Software 3: The Continuation
/
17-Bit_The_Continuation_Disc.iso
/
amigan
/
amigan 8
/
hack.bones.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-01-27
|
2KB
|
78 lines
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
#include "hack.h"
extern char plname[PL_NSIZ];
extern struct monst *makemon();
char bones[] = "bones_xx";
/* save bones and possessions of a deceased adventurer */
savebones(){
register int fd;
register struct obj *otmp;
register struct gen *gtmp;
register struct monst *mtmp;
if(!rn2(1 + dlevel/2)) return; /* not so many ghosts on low levels */
bones[6] = '0' + (dlevel/10);
bones[7] = '0' + (dlevel%10);
if((fd = open(bones,0)) >= 0){
(void) close(fd);
return;
}
/* drop everything; the corpse's possessions are usually cursed */
otmp = invent;
while(otmp){
otmp->ox = u.ux;
otmp->oy = u.uy;
otmp->known = 0;
otmp->age = 0; /* very long ago */
otmp->owornmask = 0;
if(rn2(5)) otmp->cursed = 1;
if(!otmp->nobj){
otmp->nobj = fobj;
fobj = invent;
invent = 0; /* superfluous */
break;
}
otmp = otmp->nobj;
}
if(!(mtmp = makemon(PM_GHOST, u.ux, u.uy))) return;
mtmp->mx = u.ux;
mtmp->my = u.uy;
mtmp->msleep = 1;
(void) strcpy((char *) mtmp->mextra, plname);
mkgold(somegold() + d(dlevel,30), u.ux, u.uy);
u.ux = FAR; /* avoid animals standing next to us */
keepdogs(); /* all tame animals become wild again */
for(mtmp = fmon; mtmp; mtmp = mtmp->nmon){
mtmp->mlstmv = 0;
if(mtmp->mdispl) unpmon(mtmp);
}
for(gtmp = ftrap; gtmp; gtmp = gtmp->ngen)
gtmp->gflag &= ~SEEN;
for(otmp = fobj; otmp; otmp = otmp->nobj)
otmp->onamelth = 0;
if((fd = creat(bones, FMASK)) < 0) return;
savelev(fd);
(void) close(fd);
}
getbones(){
register int fd,x,y,ok;
if(rn2(3)) return(0); /* only once in three times do we find bones */
bones[6] = '0' + dlevel/10;
bones[7] = '0' + dlevel%10;
if((fd = open(bones, 0)) < 0) return(0);
if((ok = uptodate(fd)) != 0){
(void) getlev(fd);
(void) close(fd);
for(x = 0; x < COLNO; x++) for(y = 0; y < ROWNO; y++)
levl[x][y].seen = levl[x][y].new = 0;
}
if(unlink(bones) < 0){
pline("Cannot unlink %s", bones);
return(0);
}
return(ok);
}